#include <iostream>
#include <vector>
#include <climits>	// 使用INT_MAX
#include <algorithm>// 使用min函数

using namespace std;

class Solution 
{
public:
	int minSubArrayLen(int target, vector<int>& nums) 
	{
		int left  = 0;	//left 起始位置，right 终止位置
		int sum   = 0;	//当前滑动窗口 [left, right] 区间内所有元素的累加和
		int ans   = INT_MAX;	//目前为止找到的“满足条件的最短子数组的长度”
		
		for (int right = 0; right < (int)nums.size(); right++) 
		{
			sum += nums[right];
			
			// 一旦当前窗口和 >= target，就尝试收缩左边界
			while (sum >= target) 
			{
				ans = min(ans, right - left + 1);
				sum -= nums[left];
				left++;
			}
		}
		
		return (ans == INT_MAX ? 0 : ans);
	}
};

int main() 
{
	Solution sol;
	int target;
	cout << "请输入 target: ";
	cin  >> target;
	
	int n;
	cout << "请输入数组长度 n: ";
	cin  >> n;
	
	vector<int> nums(n);
	cout << "请输入 " << n << " 个正整数，以空格分隔: ";
	for (int i = 0; i < n; i++) 
	{
		cin >> nums[i];
	}
	
	int result = sol.minSubArrayLen(target, nums);
	cout << "最短子数组长度: " << result << endl;
	
	return 0;
}

